home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / DSKEL-NUAL.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  13KB  |  550 lines

  1. //================================================================================
  2. // PROGRAM: DSKEL-NUAL (New User Application Lister)
  3. // VERSION: v1.5
  4. //COMPILER: Lattice C v5.10b
  5. //    DATE: January 1, 1993
  6. //================================================================================
  7.  
  8. /*
  9. [DSKEL-NUAL v_._] New User Application Lister     By The SkeletoN [__-__-__]
  10. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11. Enter Password:
  12.  
  13. [Return = Quit] [N = List New Users]
  14. Enter Account Number or Handle:
  15.  
  16.   #  Handle                Location             1st On  LastOn  Computer     On
  17. ===--====================--====================-======--======--===========--==
  18.  45  New User 1            Location User 1      May 31  Jun 32  Type User 1   1
  19. 143  New User 2            Location User 2      Jun 22  Jul 23  Type User 2   2
  20. ===--====================--====================-======--======--===========--==
  21.      Total Users [ 233 ]   New Users [ 23 ]
  22.  
  23.        [Return = Continue List]
  24. Enter Account Number or Handle:
  25. */
  26.  
  27.  
  28.  
  29. //**********************
  30. //*****  Includes  *****
  31. //**********************
  32.  
  33. #include <proto/all.h>
  34. #include <stdio.h>
  35. #include <time.h>
  36.  
  37. #include <string.h>
  38. #include <tempest/headers.h>
  39.  
  40. //********************************
  41. //*****  Structures/Defines  *****
  42. //********************************
  43.  
  44. struct MyMessage
  45.  {
  46.   struct Message Msg;
  47.   struct User User;
  48.   char text[255];
  49.   char text1[255];
  50.   int car,Value,Data;
  51.   long LongValue;
  52.   int  IntValue;
  53.  };
  54.  
  55. struct User User;
  56. struct User User1;
  57. struct SystemData SystemData;
  58. struct MsgPort *MyPort = NULL;
  59. struct MyMessage *msg;
  60.  
  61. #define DROP if(EXIT_FLAG) CloseStuff();
  62.  
  63. void CloseStuff();
  64. void GetStr(char s[],int opt);
  65. void getkey(char character[]);
  66. void showfile(char mstring[]);
  67. void input(char mstring[],int len);
  68. int  DOORIO();
  69. int UserNumber(int );
  70. void pl(char outstring[]);
  71. void DisplayApp();
  72. void WriteFile(char ostring[],char mstring[]);
  73. void ZmodemDownload(char *);
  74. void DownloadAll(void);
  75.  
  76. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,first = 0;
  77. char DOOR_MSG [255],DOOR_MSG1[255],MyName[255],st[100];
  78.  
  79. char string1[255],string2[255],stringold[255];
  80. char Name[255];
  81. int fd,stat,NODE;
  82.  
  83. //******************
  84. //*****  Main  *****
  85. //******************
  86.  
  87. void main(int argc,char *argv[])
  88. {
  89.  char string3[255],ch,
  90.       shit1[255],ListIt[255],Month1[50],Month2[50],Day1[50],Day2[50];
  91.  register int x,Test=0,y=0,Users,NewUsers;
  92.  int Result;
  93.  if(!DoorStart(argv[1])) { PutStr("[os2] Tempest Door\n"); exit(0); }
  94.  
  95.  NODE=atoi(argv[1]);
  96. //******************************
  97. //*****  Load Config.Data  *****
  98. //******************************
  99.  
  100.  GetStr(string1,1);
  101.  strcat(string1,"Setup/SystemData.DATA");
  102.  fd=Open(string1,MODE_OLDFILE);
  103.  Read(fd,(char *)&SystemData, sizeof(struct SystemData));
  104.  Close(fd);
  105.  
  106.  for(x=0;x<strlen(SystemData.SysopName);x++)
  107.   {
  108.    if(SystemData.SysopName[x] == '_')
  109.       SystemData.SysopName[x] = ' ';
  110.   }
  111.  
  112. //******************
  113. //*****  Code  *****
  114. //******************
  115.  
  116.  pl("\f[DSKEL-NUAL v2.0New User Application Lister   By Michael Bockert [03-20-94]\r\n");
  117.  pl("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  118.  if(SystemData.SysopCmdsPassword[0] != NULL)
  119.   {
  120.    pl("\r\nPassword: ");
  121.    setmem(string1,24,NULL);
  122.    do
  123.     {
  124.      getkey(string2);
  125.      if(string2[0] == 13)
  126.         break;
  127.      if(string2[0] == 8)
  128.       {
  129.        if(y>0)
  130.         {
  131.          y--;
  132.          string1[y] = NULL;
  133.          pl("\b \b");
  134.         }
  135.       }
  136.      else
  137.       {
  138.        if(y<21)
  139.         {
  140.          ch = string2[0];
  141.          string1[y] = ch;
  142.          pl(".");
  143.          y++;
  144.         }
  145.       }
  146.     }
  147.    while(1);
  148.    Result = stricmp(string1,SystemData.SysopCmdsPassword);
  149.    if(Result != 0)
  150.       CloseStuff();
  151.   }
  152.  y=0;
  153.  pl("\r\n\r\n");
  154.  
  155. //********************
  156. //*****  Prompt  *****
  157. //********************
  158.  
  159.  PROMPT:
  160.  if(Test == 1)
  161.     pl("\r\n[Return Continue List]");
  162.  else
  163.     pl("[Return Quit] [List New Users]");
  164.  pl("\r\n[D = Download AllEnter Account Number or Handle: ");
  165.  input(Name,31);
  166.  Name[0]=toupper(Name[0]);
  167.  if((Test != 1) && (Name[0] == NULL)) CloseStuff();
  168.  if(Name[0]=='N'&&Name[1]==NULL) goto NewUserSearch;
  169.  if(Name[0]=='D'&&Name[1]==NULL) { DownloadAll(); goto PROMPT; }
  170.  if((Name[0]=='Q')||(Name[0]=='N'))
  171.   {
  172.    if(Test) Close(fd);
  173.    CloseStuff();
  174.   }
  175.  if((Test == 1) && (Name[0] == NULL))
  176.   {
  177.    pl("\r\n");
  178.    goto NEXTFILE;
  179.   }
  180.  Result = atoi(Name);
  181.  if( (Result > 0) && (strlen(Name) < 4) )
  182.     Result = UserNumber(Result);
  183.  
  184.  if(!(Result))
  185.       DisplayApp();
  186.  goto PROMPT;
  187.  
  188. //****************************
  189. //*****  New User Search *****
  190. //****************************
  191.  
  192.  NewUserSearch:
  193.  strcpy(shit1,"===--====================--====================-======--======--===========--==\r\n");
  194.  GetStr(string3,1);
  195.  strcat(string3,"Accounts.data");
  196.  fd=Open(string3,MODE_OLDFILE);
  197.  pl("\f  #  Handle                Location             1st On  LastOn  Computer     On\r\n");
  198.  pl(shit1);
  199.  
  200.  Users=0; NewUsers=0;
  201.  
  202.  NEXTFILE:
  203.  stat=Read(fd,&User1, sizeof(struct User));
  204.  if((stat<1)||(CTRLC()))
  205.   {
  206.    Close(fd);
  207.    pl(shit1);
  208.    sprintf(string3,"     Total Users %3d ]   New Users %d ]\r\n\r\n",Users,NewUsers);
  209.    pl(string3);
  210.    Test=0;
  211.    y=0;
  212.    goto PROMPT;
  213.   }
  214.  Users++;
  215.  if(User1.Status==2)
  216.   {
  217.    NewUsers++;
  218.    strcpy(string2,ctime(&User1.Time_First_Called));
  219.    strmid(string2,Month1,5,3);
  220.    strmid(string2,Day1,9,2);
  221.    strcpy(string2,ctime(&User1.Time_Last_Logoff));
  222.    strmid(string2,Month2,5,3);
  223.    strmid(string2,Day2,9,2);
  224.    sprintf(ListIt,"%3d  %-20.20s  %-20.20s %s %s  %s %s  %-11.11s %3d\r\n",
  225.                     User1.Slot_Number,User1.Name,User1.City,Month1,Day1,Month2,Day2,User1.ComputerType,User1.Total_Calls);
  226.    pl(ListIt);
  227.    Test = 0;
  228.    if(y+5 > User.Length)
  229.     {
  230.      Test=1;
  231.      y=0;
  232.      goto PROMPT;
  233.     }
  234.    y++;
  235.   }
  236.  goto NEXTFILE;
  237. }
  238.  
  239. //********************
  240. //*****  User #  *****
  241. //********************
  242.  
  243. int UserNumber(int Slot)
  244. {
  245.  int fd2,stat;
  246.  long Position;
  247.  char string[255];
  248.  Slot--;
  249.  Position = (LONG) Slot * sizeof(struct User);
  250.  GetStr(string,1);
  251.  strcat(string,"Accounts.data");
  252.  fd2=Open(string,MODE_OLDFILE);
  253.  if(fd2==0)
  254.     return(0);
  255.  stat = Seek(fd2,Position,0);
  256.  if(stat == -1)
  257.   {
  258.    pl("\r\nNumber to high!\r\n\r\n");
  259.    return(1);
  260.   }
  261.  Read(fd2,(char *)&User1, sizeof(struct User));
  262.  Close(fd2);
  263.  strcpy(Name,User1.Name);
  264.  return(0);
  265. }
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272. //*************************
  273. //*****  Display App  *****
  274. //*************************
  275.  
  276. void DisplayApp()
  277. {
  278.  register int x;
  279.  char path[255];
  280.  
  281. //**********************
  282. //*****  Fix Name  *****
  283. //**********************
  284.  for(x=0;x<strlen(Name);x++)
  285.   {
  286.    if(Name[x]==' ' || Name[x]=='/' || Name[x]==':' || Name[x]=='?' || Name[x]=='*')
  287.       stringold[x]='_';
  288.    else
  289.       stringold[x]=Name[x];
  290.   }
  291.  stringold[x]='\0';
  292.  GetStr(path,9);
  293.  sprintf(string2,"%sApplications/%s.ans",path,stringold);
  294. //*********************************
  295. //*****  Display Application  *****
  296. //*********************************
  297.  if(access(string2,0)==0)
  298.   {
  299.    pl("\f");
  300.    showfile(string2);
  301. //**********************************
  302. //*****  Write Activity to Log *****
  303. //**********************************
  304.    if( (stricmp(User.Name,Name) != 0) && (stricmp(SystemData.SysopName,User.Name) != 0) )
  305.     {
  306.      sprintf(string1,"%sSkel-NUAL.Log",SystemData.LogsPath);
  307.      sprintf(string2,"%s Viewed App of %s\n",User.Name,Name);
  308.      WriteFile(string1,string2);
  309.     }
  310.   }
  311. }
  312.  
  313.  
  314. //**************************
  315. //*****  Download All  *****
  316. //**************************
  317.  
  318. void DownloadAll(void)
  319. {
  320.  char string1[200],string3[200],output[100],input[100],stringold[100],Name[75];
  321.  int stat,fd,x;
  322.  FILE *out,*in;
  323.  
  324.  pl("\r\nPlease wait while file is created!\r\n\r\n");
  325.  
  326.  sprintf(output,"NODE:DLNUAL-%d",NODE);
  327.  GetStr(string3,1);
  328.  strcat(string3,"Accounts.data");
  329.  fd=Open(string3,MODE_OLDFILE);
  330.  if(fd==0) return;
  331.  out=fopen(output,"w");
  332.  if(out==NULL) return;
  333.  
  334.  NEXTFILE:
  335.  stat=Read(fd,&User1, sizeof(struct User));
  336.  if((stat<1)||(CTRLC()))
  337.   {
  338.    Close(fd);
  339.    fclose(out);
  340.    pl("File created! Press any key to start download!\r\n");
  341.    getkey(string3);
  342.    ZmodemDownload(output);
  343.    DeleteFile(output);
  344.    return;
  345.   }
  346.  if(User1.Status==2)
  347.   {
  348.    strcpy(Name,User1.Name);
  349.    for(x=0;x<strlen(Name);x++)
  350.     {
  351.      if(Name[x]==' ' || Name[x]=='/' || Name[x]==':' || Name[x]=='?' || Name[x]=='*')
  352.         stringold[x]='_';
  353.      else
  354.         stringold[x]=Name[x];
  355.     }
  356.    stringold[x]='\0';
  357.    GetStr(string3,9);
  358.    sprintf(input,"%sApplications/%s.ans",string3,stringold);
  359.  
  360.    in=fopen(input,"r");
  361.    if(in!=NULL)
  362.     {
  363.      while(fgets(string1,120,in)!=NULL)
  364.       {
  365.        if(!((string1[0]=='P')&&(string1[7]=='d')&&(string1[13]==':'))) fprintf(out,string1);
  366.       }
  367.      fprintf(out,"==============================================================================\n");
  368.      fclose(in);
  369.     }
  370.   }
  371.  goto NEXTFILE;
  372. }
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385. //*************************
  386. //*****  Close Stuff  *****
  387. //*************************
  388.  
  389. void CloseStuff()
  390. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  391.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  392.  if(MyPort) DeletePort(MyPort);
  393.  exit(0); }
  394.  
  395. //********************
  396. //*****  DoorIO  *****
  397. //********************
  398.  
  399. int DOORIO()
  400. {
  401.  struct MsgPort *HisPort;
  402.  struct MyMessage message;
  403.  int UPDATE;
  404.  if(EXIT_FLAG) return 0;
  405.  UPDATE=0;
  406.  HisPort = FindPort(st);
  407.  if(HisPort!=NULL)
  408.   {
  409.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  410.    message.Msg.mn_Length = sizeof(message);
  411.    message.Msg.mn_ReplyPort = MyPort;
  412.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  413.    message.car   = 0;
  414.    message.Data  = DOOR_DATA;
  415.    message.Value = DOOR_VALUE;
  416.    message.IntValue = DOOR_VALUE1;
  417.    strcpy(message.text,DOOR_MSG);
  418.    strcpy(message.text1,DOOR_MSG1);
  419.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  420.    Wait(1 << MyPort->mp_SigBit);
  421.    GetMsg(MyPort);
  422.    DOOR_DATA  = message.Data;
  423.    DOOR_VALUE = message.Value;
  424.    DOOR_VALUE1 = message.IntValue;
  425.    strcpy(DOOR_MSG,message.text);
  426.    strcpy(DOOR_MSG1,message.text1);
  427.    CopyMem(&message.User,&User,sizeof(struct User));
  428.    first=1;
  429.    UPDATE=0;
  430.    if(message.car) EXIT_FLAG=1;
  431.   }
  432.  return 0;
  433. }
  434.  
  435. //************************
  436. //*****  Door Start  *****
  437. //************************
  438.  
  439. DoorStart(char node[])
  440. {
  441.  struct MsgPort *HisPort;
  442.  EXIT_FLAG = 0;
  443.  sprintf(st,"%s:TEMPEST_DOOR",node);
  444.  HisPort = FindPort(st);
  445.  if(HisPort==NULL) return (FALSE);
  446.  sprintf(MyName,"%s:DOOR_PORT",node);
  447.  MyPort = CreatePort(MyName,0L);
  448.  if(MyPort==NULL)
  449.   {
  450.    PutStr("Cant Open port");
  451.    return(int)FALSE;
  452.   }
  453.  DOORIO();
  454.  return (int)TRUE;
  455. }
  456.  
  457. //*********************
  458. //*****  Get Key  *****
  459. //*********************
  460.  
  461. void getkey(char character[])
  462. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=31; DOORIO(); strcpy(character,DOOR_MSG); DROP; }
  463.  
  464. //*********************************
  465. //*****  GetStr (Get String)  *****
  466. //*********************************
  467.  
  468. void GetStr(char s[],int opt)
  469. { DOOR_DATA=15; DOOR_VALUE=opt; strcpy(s,'\0'); DOORIO(); strcpy(s,DOOR_MSG); }
  470.  
  471. //*******************
  472. //*****  Input  *****
  473. //*******************
  474.  
  475. void input(char mstring[],int len)
  476. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  477.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); DROP; }
  478.  
  479. //*****************************
  480. //*****  PL (Print Line)  *****
  481. //*****************************
  482.  
  483. void pl(char outstring[])
  484. { DOOR_DATA=1; strcpy(DOOR_MSG,outstring); DOORIO(); }
  485.  
  486. //***********************
  487. //*****  Show File  *****
  488. //***********************
  489.  
  490. void showfile(char mstring[])
  491. {
  492.  FILE *fp;
  493.  char string[255],string2[255],key[50];
  494.  int x=0;
  495.  
  496.  fp=fopen(mstring,"r");
  497.  if(fp!=NULL)
  498.   {
  499.    while(fgets(string,120,fp)!=NULL)
  500.     {
  501.      if(User.Slot_Number==1) goto OK;
  502.      if(!((string[0]=='P')&&(string[7]=='d')&&(string[13]==':')))
  503.       {
  504.        OK:
  505.        sprintf(string2,"%s\r",string);
  506.        pl(string2);
  507.       }
  508.      x++;
  509.      if(x>16)
  510.       {
  511.        x=0;
  512.        pl("More [Y,n]: ");
  513.        getkey(key);
  514.        pl("\r\n");
  515.        if((key[0]=='n')||(key[0]=='N')) { fclose(fp); return; }
  516.       }
  517.     }
  518.   }
  519.  fclose(fp);
  520. }
  521.  
  522. //************************
  523. //*****  Write File  *****
  524. //************************
  525.  
  526. void WriteFile(char ostring[],char mstring[])
  527. { DOOR_DATA=16; strcpy(DOOR_MSG,ostring); strcpy(DOOR_MSG1,mstring); DOORIO();
  528.   strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  529.  
  530.  //*****************************
  531.  //*****  Zmodem Download  *****
  532.  //*****************************
  533.  
  534.  // Send a file with zmodem, just send the complete path.
  535.  
  536.  void ZmodemDownload(char path[])
  537.  { DOOR_DATA=27; strcpy(DOOR_MSG,path); DOORIO(); }
  538.  
  539.  
  540. //*************************
  541. //*****  CTRLC CHECK  *****
  542. //*************************
  543.  
  544. int CTRLC(void)
  545.  {
  546.   DOOR_DATA=73;
  547.   DOORIO();
  548.   return(DOOR_VALUE);
  549.  }
  550.